Linux系统日志

        日志重要吗?必须的,没有日志我们怎么知道系统状况?没有日志如何排查一个trouble?日志记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测,还可以实时的监测系统状态,监测和追踪侵入者等等。

        配置文件 /etc/rsyslog.conf 。CentOS默认改为 rsyslog.conf 之前版本是 syslog.conf 。该配置文件主要信息为:记录哪些服务和需要记录什么等级的信息。

日志格式:

  • auth -pam生产的日志

  • authpriv -ssh,ftp 等登录信息的验证信息

  • cron -时间任务相关

  • kern -内核

  • lpr -打印

  • mail -邮件

  • mark(syslog) -rsyslog服务内部的信息,时间标识

  • news -新闻组

  • user -用户程序产生的相关信息

  • uucp -unix to unix copy,unix主机之间相关的通讯

  • local 1~7 -自定义的日志设备

日志级别:

  • debug -有调试信息的,日志信息最多

  • info -一般信息的日志,最常用

  • notice -最具有重要性的普通条件的信息

  • warning -警告级别

  • err -错误级别,阻止某个功能或者模块不能正常工作的信息

  • crit -严重级别,阻止整个系统或者整个软件不能正常工作的信息

  • alert -需要立刻修改的信息

  • emerg -内核崩溃严重信息

  • none -什么都不记录

        从上到下,级别从低到高,记录的信息越来越少

连接符号:

  • .: 表示大于等于xxx 级别的信息

  • .=: 表示等于xxx 级别的信息

  • .!: 表示在xxx 之外的等级的信息

/var/log/messages 核心系统日志文件

        这个日志是linux 系统最核心的日志文件,假若某个服务没有定义日志,那么该服务产生的日志就会到这个文件中。该日志每周归档一次。它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO错误、网络错误和其他系统错误都会记录到这个文件中。另外其他信息,比如某个人的身份切换为root以及用户自定义安装的软件(apache)的日志也会在这里列出。通常,/var/log/messages是在做故障诊断时首先要查看的文件。系统有一个日志轮询的机制,每星期切换一个日志,变成message.xxxxxxxx, message.xxxxxxxx, … messages.xxxxxxxx 连同messages一共有5个这样的日志文件。这里的xxxxxxxx就是按照日期的格式生成的文件,在CentOS5里,这个后缀并不是日期而是数字1,2,3,4. 这是通过logrotate工具的控制来实现的

1
2
3
4
[root@localhost ~]# ls /var/log/messages*
/var/log/messages /var/log/messages-20161016.1 /var/log/messages-20161120
/var/log/messages-20161010.1 /var/log/messages-20161016.bak /var/log/messages-20161129
/var/log/messages-20161010.bak /var/log/messages-20161114 /var/log/messages-20161204

        它的配置文件是/etc/logrotate.conf如果没有特殊需求请不要修改这个配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@localhost ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.

        /var/log/messages是由syslogd这个守护进程产生的,如果停掉这个服务则系统不会产生/var/log/messages,所以这个服务不要停。Syslogd服务的配置文件为/etc/syslog.conf这个文件定义了日志的级别,若没有特殊需求是不需要修改这个配置文件的,使用 man syslog.conf 获得更多关于它的信息。

        除了关注/var/log/messages外,还应该多关注一下 dmesg 这个命令,它可以显示系统的启动信息,如果某个硬件有问题(比如说网卡)用这个命令也是可以看到的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~]# dmesg |less
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-220.el6.x86_64 (mockbuild@c6b18n3.bsys.dev.centos.org)
(gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Tue Dec 6
19:48:22 GMT 2011
Command line: ro root=UUID=7912412b-3e66-401d-9ef5-3c2aba8dc737 rd_NO_LUKS
KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD quiet rhgb crashkernel=auto
LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
Centaur CentaurHauls
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009a400 (usable)
BIOS-e820: 000000000009a400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved)
BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cff60000 (usable)
BIOS-e820: 00000000cff60000 - 00000000cff69000 (ACPI data)

命令:last

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# last |head
root pts/0 192.168.0.207 Wed Jun 12 20:28 still logged in
root pts/1 192.168.0.207 Wed Jun 12 20:27 still logged in
root pts/0 192.168.0.161 Wed Jun 12 14:36 - 20:27 (05:50)
root pts/0 192.168.0.161 Wed Jun 12 14:36 - 14:36 (00:00)
root pts/0 192.168.0.207 Wed Jun 12 11:42 - 14:36 (02:54)
root pts/0 192.168.0.207 Mon Jun 10 12:23 - 14:23 (02:00)
root pts/0 192.168.0.70 Sat Jun 8 16:43 - 17:53 (01:09)
root pts/0 192.168.0.70 Fri Jun 7 16:43 - 17:27 (00:44)
root pts/0 192.168.0.70 Fri Jun 7 09:57 - 16:09 (06:11)
root pts/0 192.168.0.70 Thu Jun 6 13:40 - 17:50 (04:09)

        last命令用来查看登录Linux历史信息,从左至右依次为账户名称、登录终端、登录客户端ip、登录日期及时长。last命令输出的信息实际上是读取了二进制日志文件/var/log/wtmp, 只是这个文件不能直接使用cat, vim, head, tail等工具查看。

        另外一个和登陆信息有关的日志文件为/var/log/secure, 该日志文件记录验证和授权等方面的信息,比如ssh登陆系统成功或者失败,都会把相关信息记录在这个日志里。

  • /var/log/wtmp日志用来查看用户登录历史,但这个文件不能直接cat查看,只能用last命令查看。

  • /var/log/btmp日志和wtmp类似,也不能直接cat查看,用命令lastb查看,记录无效登录历史。

  • /var/log/maillog是用来记录邮件相关的信息,比如发给谁邮件,是否发出去等信息。

  • /var/log/secure是一个安全认证相关的日志,比如系统用户登录时,正常登录或者登录失败都会记录,另外ftp服务相关的登录日志也会记录到这里来。

        dmesg这是一个命令,主要查看系统实时的硬件设备抛出的信息,如果磁盘异常或者网络异常或者内核异常都会记录下来。只不过这些信息是存到内存里的,系统重启后就消失了。